RxJS
提供許多內建的功能,讓大家可以快速的組合出我們要的連續技。
Creates an Observable from DOM events, or Node.js EventEmitter events or others.
,簡單來說,就是根據你要監聽的事件,發送相關的事件資料給你。
target
: 你目標的DOM
,一般來說,我們使用document
(註1)eventName
: 事件的名稱, ex: click
點擊事件, keyup
鍵盤事件...等import { fromEvent } from 'rxjs';
// 第一步: 建立事件的observable
const obs$ = fromEvent(document, 'click'); //<-- 依序設定 target及eventName
// 第二步: 建立觀察者
const observer = {
next: (value) => console.log('next', value),
error: (err) => console.log('error', err),
complete: () => console.log('compleye'),
};
// 第三步: 訂閱
const clickSub$ = obs$.subscribe(observer);
inspect
,開啟console
就可以看到啦!我們可以取得click的事件資料,自然可以parse出我們要的資訊囉。
例如:我想印一下click的座標位置
...
const observer = {
// next: (value) => console.log('next', value),
next: (value) => {
const { x, y } = value; //<-- parse出click事件資料,取得x,y座標
console.log('next',`(${x}, ${y})`); //<-- 印出x,y座標
},
error: (err) => console.log('error', err),
complete: () => console.log('compleye'),
};
...
import { fromEvent } from 'rxjs';
...
// 第三步: 訂閱
const clickSub$ = obs$.subscribe(observer);
// 嘗試著點點看右上角的頁面,5秒後就取消訂閱,抓不到點擊!
let time = 5000;
let count = 0;
console.log('=== 你可以開始點擊頁面 ===');
const id = setInterval(() => {
// console.log((count += 1)); //<--打開可以看到 讀秒
}, 1000);
setTimeout(() => {
clickSub$.unsubscribe(); // 取消訂閱
clearInterval(id);
console.log(`${time}秒到!結束滑鼠偵測`);
}, time);
setTimeout
設定5秒後取消訂閱,是不是超Easy~!
fromEvent(target, eventName)
讓我們在事件處理上,也能夠透過Observable
的方式來進行。target
的click
換為keyup
,來練習看看取得哪個鍵被按下。// 嘗試著點點看右上角的頁面,3秒後就取消訂閱,抓不到點擊!
應該是5秒,這裡有筆誤哦~
didilili果然厲害
逃不過你的火眼金睛